﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports;


namespace ShangWeiDemo1
{
    public partial class Form_Config : Form
    {
        public Form_Config()
        {
            InitializeComponent();
        }
        
        // 加载事件处理程序
        private void Form_Config_Load(object sender, EventArgs e)
        {
            // 1. 枚举并填充 COM 端口列表
            // 使用 var 让编译器自动识别 SerialPort.GetPortNames() 返回的是 string 数组类型
            var portNames = SerialPort.GetPortNames();

            // 清除现有项，并使用 AddRange 方法手动添加所有端口名称。
            cboPortName.Items.Clear();
            cboPortName.Items.AddRange(portNames);

            // 2. 从持久化设置中加载上次保存的值
            string savedPort = Properties.Settings.Default.PortName;

            // 尝试选择上次使用的端口名
            if (cboPortName.Items.Contains(savedPort))
            {
                // 如果上次保存的端口仍然可用，则选中它
                cboPortName.SelectedItem = savedPort;
            }
            // 如果上次保存的端口不可用，但列表内有端口，默认选中第一个
            else if (cboPortName.Items.Count > 0)
            {
                cboPortName.SelectedIndex = 0;
            }
            // 如果没有可用端口，将保持为空，等待用户配置。
        }

        // 确认按钮点击事件处理程序
        private void btnConfirm_Click(object sender, EventArgs e)
        {
            if (cboPortName.SelectedItem == null)
            {
                MessageBox.Show("请选择一个串口。", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }

            try
            {
                // 1. 将 ComboBox 中的当前值写入设置对象
                Properties.Settings.Default.PortName = cboPortName.SelectedItem.ToString();

                // 注意：虽然界面上只保留了 PortName，但应用在后台仍需要 BaudRate 等参数。
                // 假设这些值在 Properties.Settings.Default 中已经预设或在其他地方配置。

                // 2. 立即将更改持久化到用户配置文件 [2, 3]
                Properties.Settings.Default.Save();

                // 3. 设置 DialogResult 为 OK，表示配置成功
                this.DialogResult = DialogResult.OK;
                this.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show($"保存配置失败: {ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }


        // 取消按钮点击事件处理程序
        private void btnCancel_Click(object sender, EventArgs e)
        {
            // 设置 DialogResult 为 Cancel，表示不保存更改 [4]
            this.DialogResult = DialogResult.Cancel;
            this.Close();
        }
    }
}
